package com.example.常用注解说明;

import com.example.basicSpringBoot.CommonAnnotation;
import org.springframework.stereotype.Component;

/**
 * 说明
 * 本实例是为了展示java语法中，
 * 注解可以使用的位置
 */
@CommonAnnotation
public class UseAnnotation implements IUseAnnotation {
	// ElementType.FIELD 可以在field上面使用
	@CommonAnnotation
	private int privateInt;
	@CommonAnnotation
	int defaultInt;
	@CommonAnnotation
	protected int protectInt;
	@CommonAnnotation
	public int publicInt;


	// ElementType.METHOD 可以在field上面使用
	@CommonAnnotation
	private void privateMethod(){}
	@CommonAnnotation
	void defaultMethod(){}
	@CommonAnnotation
	protected void protectMethod(){}
	@CommonAnnotation
	public void publicMethod(){}

	//ElementType.PARAMETER 可以在参数上使用
	public void paramAnnotation(@CommonAnnotation String name){

		// LOCAL_VARIABLE 本地变量也可以注释
		@CommonAnnotation
		String localName ="hello";

		System.out.println(name);
	}

	// 注解应该继承过来标记，除非你有意的要改变
	@Override
	public @CommonAnnotation void abstractMethod() {

	}
	// 注意这里是其他写法
	// @CommonAnnotation public void abstractMethod() {}
	/*
	@CommonAnnotation
	public void abstractMethod() {}
	*/
	// 构造器也可以使用注解
	@CommonAnnotation
	public UseAnnotation() {
	}

}

@CommonAnnotation
enum EnumSomeThing {
	SUCCESS,
	FAIL
}

// ElementType.TYPE 可以在接口上使用
@CommonAnnotation
interface IUseAnnotation {
	//抽象方法也可以用注解
	// 实现出来的方法，是应该继承对应的注解的
	@CommonAnnotation
	public void abstractMethod();
}